package org.wtframework.platform.server.service;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.OutputStream;
import java.lang.reflect.Field;
import java.util.Map;
import java.util.Properties;
import java.util.ResourceBundle;

import org.openredhead.springx.core.web.mvc.ajaxrpc.BasicAjaxRpcRemoteService;
import org.openredhead.springx.core.web.mvc.annotation.AjaxRpcMethod;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.wtframework.platform.server.util.FilePath;

import OneKeyMakeForm.OneKeyMakeForm;


@Service
public class OneKeyService extends BasicAjaxRpcRemoteService{
	
	
	
	@AjaxRpcMethod
	public String hasClazz(String projectName,String key)  {
		try{
				//检查项目名和类名
				String clazzName = key.equals("")==true?"":key.substring(0, 1).toUpperCase() + key.substring(1);
				Class clazz = Class.forName("org."+projectName+".core.server.model.impl."+clazzName);
			
		}catch(ClassNotFoundException | NoClassDefFoundError  e){
			e.printStackTrace();
			return "找不到这个类";
		}
		    return null;
	}
	
	
	/** 
	* @author 卢俊华 
	* @version 创建时间：2018年8月16日 上午9:52:34 
	* @Description 获取目录
	* @param
	*/ 
	@AjaxRpcMethod
	public String[] getDirectory(String preUrl)  {
		try{
			File now = new File(preUrl);
			String[] urlList = now.list();
			return urlList;
			
		}catch(Exception e){
			e.printStackTrace();
			return null;
		}
	}
	
	
	/** 
	* @author 卢俊华 
	* @version 创建时间：2018年8月16日 上午11:15:03 
	* @Description 获取默认路径
	* @param
	*/ 
	@AjaxRpcMethod
	public String getDefultDirectory()  {
		try{
			
			return FilePath.getSystemRootPath().replace("/war", "");
			
		}catch(Exception e){
			e.printStackTrace();
			return null;
		}
	}
	
	
	/** 
	 * @author 卢俊华 
	 * @version 创建时间：2018年8月16日 上午11:15:03 
	 * @Description 是否有这个路径
	 * @param
	 */ 
	@AjaxRpcMethod
	public String isDir(String path)  {
		try{
			File f = new File(path);
			if(f.exists() && f.isDirectory()){
				return null;
			}
			return "没有此路径";
			
		}catch(Exception e){
			e.printStackTrace();
			return null;
		}
	}
	
	
	
	
	/** 
	 * @author 卢俊华 
	 * @version 创建时间：2018年8月16日 上午11:15:17 
	 * @Description 保存配置
	 * @param
	 */ 
	@AjaxRpcMethod
	public void saveConfig(String key ,String value)  {
		try{
			
			// 使用InPutStream流读取properties文件
			String configUrl = FilePath.getSystemRootPath().replace("/war", "") + "/OneKeyMakeForm/config.properties";
	        Properties props=new Properties();
            props.load(new FileInputStream(configUrl));
            OutputStream fos = new FileOutputStream(configUrl);          
            props.setProperty(key, value);
            props.store(fos, "Update value");
            fos.close();
		}catch(Exception e){
			e.printStackTrace();
		}
	}
	
	
	/** 
	 * @author 卢俊华 
	 * @version 创建时间：2018年8月16日 上午11:15:17 
	 * @Description 获取配置
	 * @param
	 */ 
	@AjaxRpcMethod
	public String getConfig(String key )  {
		try{
			
			Properties properties = new Properties();
			// 使用InPutStream流读取properties文件
			String configUrl = FilePath.getSystemRootPath().replace("/war", "") + "/OneKeyMakeForm/config.properties";
			  BufferedReader bufferedReader = new BufferedReader(new FileReader(configUrl));
			  properties.load(bufferedReader);
//			  // 获取key对应的value值
			String url = properties.getProperty(key, FilePath.getSystemRootPath().replace("/war", ""));
			
			return url;
		}catch(Exception e){
			e.printStackTrace();
			return null;
		}
	}
	
	
 
	@AjaxRpcMethod
	public String hasController(String projectName,String controller)  {
		try{
			//检查项目名和类名
			String clazzName = controller.equals("")==true?"":controller.substring(0, 1).toUpperCase() + controller.substring(1);
			Class clazz = Class.forName("org."+projectName+".core.web.mvc.action.impl."+clazzName);
			
		}catch(ClassNotFoundException | NoClassDefFoundError  e){
			e.printStackTrace();
			return "找不到这个controller";
		}
		return null;
	}
	
	
	@AjaxRpcMethod
	public String hasAttr(String projectName,String key,String attr) throws ClassNotFoundException  {
		try{
			//检查属性
			String clazzName = key.equals("")==true?"":key.substring(0, 1).toUpperCase() + key.substring(1);
			Class clazz = Class.forName("org."+projectName+".core.server.model.impl."+clazzName);
			Field att = clazz.getDeclaredField(attr);
			
		}catch(NoSuchFieldException | SecurityException  e){
			e.printStackTrace();
			return "没找到这个属性";
		}
		return null;
	}
	
	
	@AjaxRpcMethod
	public String isDate(String projectName,String key,String attr) throws ClassNotFoundException  {
		try{
			
			//检查属性是否为date
			String clazzName = key.equals("")==true?"":key.substring(0, 1).toUpperCase() + key.substring(1);
			Class clazz = Class.forName("org."+projectName+".core.server.model.impl."+clazzName);
			Field att = clazz.getDeclaredField(attr);
			if(!att.getGenericType().toString().equals("class java.util.Date")){
				throw new Exception("此属性不是date类型");
			}
			
		}catch(Exception  e){
			e.printStackTrace();
			return e.getMessage();
		}
		return null;
	}
	
	
	@AjaxRpcMethod
	public Field[] getAllAttr(String projectName,String key) throws ClassNotFoundException  {
		try{
			
			//获取所有属性
			String clazzName = key.equals("")==true?"":key.substring(0, 1).toUpperCase() + key.substring(1);
			Class clazz = Class.forName("org."+projectName+".core.server.model.impl."+clazzName);
			Field[] fields = clazz.getDeclaredFields();
			
			return fields;
			
			
		}catch(Exception  e){
			e.printStackTrace();
			return null;
		}
	}
	
	
	@AjaxRpcMethod
	public String createFile(Map<String,Object> data) throws ClassNotFoundException  {
		try{
			
			 OneKeyMakeForm.createFile(data);
			
		}catch(Exception  e){
			e.printStackTrace();
			return e.getMessage();
		}
		return null;
	}
	
	
	
	/** 
	* @author 卢俊华 
	* @version 创建时间：2018年8月13日 下午4:03:21 
	* @Description 检查文件是否已经存在
	* @param
	*/ 
	@AjaxRpcMethod
	public String hasFile(String projectName,String module,String key) {
		try{
			String clazzName = key.equals("")==true?"":key.substring(0, 1).toUpperCase() + key.substring(1);
			StringBuffer sb = new StringBuffer();
			
			//Manager
			String managerUrl = FilePath.getSystemRootPath().replace("/war", "")+"/src/org/"+projectName+"/core/server/manager/impl/"+clazzName+"Manager.java";
			File managerFile = new File(managerUrl);
			if(managerFile.exists()){
				sb.append("Manager、");
			}
			
			//Service
			String serviceUrl = FilePath.getSystemRootPath().replace("/war", "")+"/src/org/"+projectName+"/core/server/service/"+clazzName+"Service.java";
			File serviceFile = new File(serviceUrl);
			if(serviceFile.exists()){
				sb.append("Service、");
			}
			
			//Controller
//			String ControllerUrl = FilePath.getSystemRootPath().replace("/war", "")+"/src/org/"+projectName+"/core/server/service/"+clazzName+"Service.java";
//			File ControllerFile = new File(managerUrl);
//			if(ControllerFile.exists()){
//				throw new Exception("已存在此对象的Controller");
//			}
			
			//css
			String cssUrl = FilePath.getSystemRootPath()+"/style/"+projectName+"/"+module+"/css/"+key+".css";
			File cssFile = new File(cssUrl);
			if(cssFile.exists()){
				sb.append("Css、");
			}
			
			
			//js
			String jsUrl = FilePath.getSystemRootPath()+"/style/"+projectName+"/"+module+"/js/"+key+".js";
			File jsFile = new File(jsUrl);
			if(jsFile.exists()){
				sb.append("Js、");
			}
			
			//jetx
			String jetxUrl = FilePath.getSystemRootPath()+"/WEB-INF/view/jetx/"+projectName+"/"+module+"/"+key+".jetx";
			File jetxFile = new File(jetxUrl);
			if(jetxFile.exists()){
				sb.append("jetx、");
			}
			
			if(sb.toString()!=""){
				throw new Exception(sb.substring(0,sb.length()-1)+"已经存在!");
			}
			
			
		}catch(Exception  e){
			e.printStackTrace();
			return e.getMessage();
		}
		return null;
	}
	
	
	
	
	
}
